package com.ymt.reliable.message.service;

import com.ymt.reliable.message.domain.TransactionMessage;
import com.ymt.reliable.message.exception.TransactionMessageNotExistException;

import java.util.List;

public interface TransactionMessageService {
    /**
     * 预存储消息
     *
     * @param messageBody   消息内容
     * @param consumerQueue 队列名称
     * @param field1        扩展字段1
     * @param field2        扩展字段2
     * @param field3        扩展字段3
     * @return 消息编号
     */
    String savePreparMessage(String messageBody, String consumerQueue, String field1, String field2, String field3);

    /**
     * 确认并发送消息
     *
     * @param messageId 消息编号
     */
    void confirmAndSend(String messageId) throws TransactionMessageNotExistException;

    /**
     * 直接发送消息
     *
     * @param messageBody   消息内容
     * @param consumerQueue 队列名称
     */
    void directSendMessage(String messageBody, String consumerQueue);

    /**
     * 根据messageId重发某条消息
     *
     * @param messageId 消息编号
     */
    void retry(String messageId) throws TransactionMessageNotExistException;

    /**
     * 根据消息ID删除消息
     *
     * @param messageId 消息编号
     */
    void delete(String messageId);

    /**
     * 查询需要重试的消息列表
     *
     * @return
     */
    List<TransactionMessage> queryRetryList();

    /**
     * 查询需要重试的消息列表
     *
     * @return
     */
    List<TransactionMessage> queryRetryList(Long timeout);

    List<TransactionMessage> queryConfirmList(Long timeout, Integer maxconfirmtimes);

    Integer update(TransactionMessage message);
}
